import base64
from typing import Optional

import cv2
import numpy as np


def base64_to_ndarray(base64_str):
    # 将 base64 字符串解码为二进制图像数据
    img_data = base64.b64decode(base64_str)
    # 转换为 numpy 数组并解码为 OpenCV 格式的图像
    nparr = np.frombuffer(img_data, np.uint8)
    image = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
    if image is None:
        raise ValueError("图片解码失败，请检查传入的 base64 字符串")

    return image


def ndarray_to_base64(img_array: np.ndarray, format: Optional[str] = ".jpg") -> str:
    # 将图像数组编码为二进制格式
    _, buffer = cv2.imencode(format, img_array)
    # 将二进制图像数据转换为 Base64 字符串
    img_base64 = base64.b64encode(buffer).decode("utf-8")
    return img_base64
